import { OutputOptions } from 'rollup'

/**
 * 生成 Vite build 库打包配置项中 rollup 打包输出格式为 cjs 模块的配置，默认已有的配置：
 * - format 打包输出格式，默认为 `'cjs'`
 * - dir 打包输出目录，默认为 `'lib'`
 * - entryFileNames 打包输出结果的入口文件名，默认为 `[name].js`，即原本的入口文件的文件名加上 `.js`
 * - preserveModules 是否使用原始的模块文件名(源码文件名)作为输出结果的文件名，默认为 `true`
 * - preserveModulesRoot 原始模块文件的根目录，默认为 `'src'`
 *
 * @param {OutputOptions} options Vite build 库打包配置项中 rollup 打包输出格式为 cjs 模块的配置
 * @returns {OutputOptions} Vite build 库打包配置项中 rollup 打包输出格式为 cjs 模块的配置
 */
export const genLibRollupOutputCJSConfig = (options: OutputOptions = {}): OutputOptions => {
  return {
    // 打包输出格式，cjs 模块
    format: 'cjs',
    // 输出目录
    dir: 'lib',
    // 打包输出结果的入口文件名：[name] 入口文件的文件名加上 `.js`
    entryFileNames: '[name].js',
    // 使用原始的模块文件名(源码文件名)作为输出结果的文件名
    preserveModules: true,
    // 原始模块文件的根目录
    preserveModulesRoot: 'src',
    ...options
  }
}

export type GenLibRollupOutputCJSConfigType = typeof genLibRollupOutputCJSConfig
